package com.lx.consumer.configs;

/**
 * TODO 添加描述
 *
 * @author wangLJ
 * @date 2024/10/15 14:50
 */

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 如果队列、交换机和绑定已经在RabbitMQ服务器上存在，并且这些资源没有被删除，那么消费者不需要再次声明这些资源。但是，通常来说，在消费者端仍然会进行声明操作以确保这些资源确实存在。这是为了防止资源不存在的情况发生时能够自动创建它们。同样地，如果生产者知道队列、
 * 交换机和绑定已经存在，那么它不需要再次声明它们。然而，在实践中，生产者通常还是会包含声明逻辑，以处理可能的异常情况（例如队列意外被删除）。
 */
@Configuration
public class DirectRabbitConfig {
//    @Bean
//    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
//        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
//        factory.setConnectionFactory(connectionFactory);
//        factory.setMessageConverter(new Jackson2JsonMessageConverter());
//        return factory;
//    }
    //队列 起名：TestDirectQueue
    @Bean
    public Queue TestDirectQueue() {
        return new Queue("TestDirectQueue",true);
    }

    //Direct交换机 起名：TestDirectExchange
    @Bean
    DirectExchange TestDirectExchange() {
        return new DirectExchange("TestDirectExchange");
    }

    //绑定  将队列和交换机绑定, 并设置用于匹配键：TestDirectRouting
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with("TestDirectRouting");
    }
}
